import 'dart:async';

import 'package:flutter_chat/common/utils/log.dart';
import 'package:get/get.dart';
import 'package:json2dart_safe/json2dart.dart';

class RetryService extends GetxService {
  static RetryService get to => Get.find();

  final Map<String, Timer> _timerMap = {};

  /// 服务数量
  final _serviceCount = 0.obs;
  set serviceCount(int value) => _serviceCount.value = value;
  int get serviceCount => _serviceCount.value;

  /// 启动重试服务
  bool startService(
    String key,
    Future<bool> Function() serviceFunction, {
    Duration interval = const Duration(seconds: 1),
  }) {
    if (_timerMap.containsKey(key)) {
      LogUtil.p("---- 服务名称为 $key 的重试服务已存在 ----");
      return false;
    }

    // 创建定时器
    Timer timer = Timer.periodic(interval, (Timer timer) async {
      // 执行服务函数
      if (await serviceFunction() == true) {
        // 如果服务函数返回 true，停止服务并移除状态
        stopService(key);
      }
    });

    // 添加定时器到列表
    _timerMap.put(key, timer);

    // 更新服务数量
    serviceCount = _timerMap.length;

    return true;
  }

  /// 停止重试服务
  void stopService(String key) {
    LogUtil.p("---- 停止并移除名称为 $key 的重试服务 ----");
    _timerMap[key]?.cancel();
    _timerMap.remove(key);
    serviceCount = _timerMap.length;
  }

  /// 停止所有重试服务
  void stopAllServices() {
    LogUtil.p("---- 停止所有重试服务 ----");
    _timerMap.forEach((key, timer) {
      timer.cancel();
    });
    _timerMap.clear();
    serviceCount = _timerMap.length;
  }
}
